package zcommon

import (
	"math"
	"runtime"
	"strings"
)

// 将各个字段连接成完整路径。
// 注意：仅支持 linux
func PathJoin(paths ...string) string {
	result := ""
	for _, path := range paths {
		if strings.HasSuffix(result, "/") || result == "" {
			result += path
		} else {
			result += "/" + path
		}
	}
	return result
}

// 浮点数保留 n 位小数。
func Round(f float64, n int) float64 {
	pow10_n := math.Pow10(n)
	return math.Trunc((f+0.5/pow10_n)*pow10_n) / pow10_n
}

// 获取 os 类型。
// 1：windows 2：other
func GetOSType() int {
	os_type := strings.ToLower(runtime.GOOS)
	if strings.Contains(os_type, "window") {
		return 1
	}
	return 2
}

// 从字串中提取子串。
func ExtractString(str, startFlag, endFlag string) (ret string, ok bool) {
	index1 := strings.Index(str, startFlag)
	if index1 < 0 {
		return
	}
	index1 += len(startFlag)

	index2 := strings.Index(str[index1:], endFlag)
	if index2 < 0 {
		return
	}

	ret = str[index1 : index1+index2]
	ok = true
	return
}

// 从字串中提取子串。
// x: 从第 x 个 startFlag 开始匹配。例如 x = 2，则从第 2 个 startFlag 开始匹配
func ExtractStringEx(x int, str, startFlag, endFlag string) (ret string, ok bool) {
	for i := 0; i < x-1; i++ {
		tindex := strings.Index(str, startFlag)
		if tindex < 0 {
			return
		}

		str = str[tindex+1:]
	}

	return ExtractString(str, startFlag, endFlag)
}

/*
func CompareDate(t1 time.Time, t2 time.Time) int {
	num1 := t1.Year()*10000 + int(t1.Month())*100 + t1.Day()
	num2 := t2.Year()*10000 + int(t2.Month())*100 + t2.Day()
	return num1 - num2
}

func CompareX(t time.Time, it int) int {
	numt := t.Hour()*10000 + t.Minute()*100 + t.Second()
	return numt - it
}
*/
